package java_thinking.unit_11._11_10;


import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @Description : 用键值对填充一个HashMap，打印结果
 *              通过散列码来展示其排序
 *              抽取这些键值对，按照键进行排序，并将结果置于一个LinkedHashMap中，展示其所维护的插入顺序
 *
 *              T[] toArray(T[] a), 意思是把set转化为a类型的数组，前提是set元素类型和a元素类型一致，否则T就为Object
 *              参数new String[0]只是为了传一个String类型的数组，是为了传类型
 *
 *              使用无参数的toArray()有一个缺点，就是转换后的数组类型是Object[]
 *              这里的用new String[0]只是为了指定函数的形参数，最终返回的String[]的长度是由你的list存储内容的长度决定了
 *              new String[0]就是起一个模板的作用，指定了返回数组的类型，0是为了节省空间，因为它只是为了说明返回的类型
 *              list.toArray(new int[0]);//转化成int数组
 *
 *              Arrays.sort(keys)
 *              jdk中的Arrays.sort()的实现是通过所谓的双轴快排的算法:双轴快排是基于两个轴来进行比较，
 *              跟普通的选择一个点来作为轴点的快排是有很大的区别的，双轴排序利用了区间相邻的特性，对原本的快排进行了效率上的提高，
 *              很大程度上是利用了数学的一些特性
 *
 * @author: cww
 * @DateTime: 2019/3/18 8:44
 */

public class E18 {
    public static void main(String[] args) {
        Map<String,String> map = new HashMap<>();
        System.out.println(map);
        String[] keys =  map.keySet().toArray(new String[0]);
        Arrays.sort(keys);
        Map<String,String> m2 = new LinkedHashMap<>();
        for (String key:keys){
            m2.put(key,map.get(key));
        }
        System.out.println(m2);
    }


}
